I am in a situation where i want to update documents of collection in mongodb but i don't want "updatedAt" field to be updated. I want to retain the previous value of updated field. Please help.
If you are using Waterline or other database abstractions, my advice is to run the query natively in mongo.
This is how I would fix this in Sails.js (running Waterline):
let someQuery = {name: 'John Doe'};
MyModel.native(function (err, collection){
collection.update(
{query: someQuery}, // Which documents to update?
{$set:{field1: "value", foo:"bar"}}, // Our new values
{multi: true}, // To support update of multiple fields
function(err, result){
if (err) console.log(err)
else console.log(result.result)
})
});
If you are using mongoose, then relatively new feature (2020) gives you the option to override setting timestamps (or just one) on transactions.
Example from docs shown below
const userSchema = mongoose.Schema({
email: String
}, { timestamps: true });
const User = mongoose.model('User', userSchema);
const doc = await User.findOneAndUpdate({email: 'test@google.com'}, {email:'newtest@google.com'},
{new:true, upsert: true, timestamps:false});